home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / RegularExp.h < prev    next >
C/C++ Source or Header  |  1990-12-03  |  4KB  |  115 lines

  1. #ifndef RegExp_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define RegExp_First
  6.  
  7. #include "Object.h"
  8. const int cNumRegs = 10;
  9.  
  10. // interface to the GNU emacs regular expression compiler,
  11. // refer to regex.doc for a description of its advanced features
  12.  
  13. /* Examples:
  14.     float:  "\\(+\\|-\\)?[0-9]*\\(\\.[0-9]*\\)?"
  15.     int:    "\\(+\\|-\\)?[0-9]*"
  16.     double: "\\(+\\|-\\)?[0-9]*\\(\\.[0-9]*\\)?\\([eE]\\(+\\|-\\)?[0-9]*\\)?" 
  17.     alpha:  "[A-Za-z]+"
  18.     lowercase:  "[a-z]+"
  19.     uppercase:  "[A-Z]+"
  20.     alphanum:   "[0-9A-Za-z]+"
  21.     identifier: "[A-Za-z_][A-Za-z0-9_]*"
  22. */
  23.  
  24. typedef struct { 
  25.     int start[cNumRegs];
  26.     int end[cNumRegs];
  27. } RegExRegs;
  28.  
  29. //   Pass the address of such a structure as an argument to Match, etc.,
  30. //   if you want this information back.
  31. //
  32. //   start[i] and end[i] record the string matched by \( ... \) grouping i,
  33. //   for i from 1 to cNumReg - 1.
  34. //   start[0] and end[0] record the entire string matched.
  35. //   eg: Regex = "a\(b*\)c"
  36. //       String = "abbbbc" 
  37. //       start[1] = 1, end[1] = 5
  38. //
  39.  
  40. //---- class RegularExp -----------------------------------------------------
  41.  
  42. class RegularExp: public Object {
  43.     struct re_pattern_buffer *pb;
  44.     char *source;
  45.     char *result;
  46.     bool caseSensitive;
  47.     bool fastSearch;
  48. public:
  49.     MetaDef(RegularExp);
  50.  
  51.     RegularExp(char *pattern= 0, bool caseSensitive= TRUE, bool fastSearch= TRUE);
  52.     ~RegularExp();
  53.  
  54.     void Reset(char *pattern, bool caseSensitive= TRUE, bool fastSearch= TRUE);
  55.     // recompiles the pattern if necessary
  56.  
  57.     char *GetExprState(); 
  58.     // 0 == pattern ok, otherwise reason of failure
  59.  
  60.     int Match (char *string, int pos = 0, int len = -1, RegExRegs *regs = 0); 
  61.     // returns length of matched pattern, starting at pos (-1= no match)
  62.  
  63.     int SearchForward (char *string, int *nMatched, int start = 0, int len = -1, 
  64.                        int range = cMaxInt, RegExRegs *regs = 0);
  65.     // return the position of the next matching substring (-1 == no match),
  66.     // per default the range is set up to the end of the string, nMatched
  67.     // is set to the number of matched characters
  68.  
  69.     int SearchBackward (char *string, int *nMatched, int start = cMaxInt, 
  70.              int len = -1, int range = cMaxInt, RegExRegs *regs = 0);
  71.     // find next matching substring starting at pos and trying the
  72.     // positions pos-1, pos-2 etc. 
  73.  
  74.     int Match2 (char *string1, char *string2, int len1 = -1,int len2 = -1,
  75.               int pos = 0, int stopMatchAt = cMaxInt, RegExRegs *regs = 0);
  76.     // matches the pattern as if string1 and string2 were concatented
  77.  
  78.     int SearchForward2(char *str1,int size1, char *str2, int size2, int start,
  79.             int itsRange, RegExRegs *regs, int *nMatched);
  80.     // like Match2
  81.  
  82.     int SearchBackward2(char *str1,int size1, char *str2, int size2, int start,
  83.             int itsRange, RegExRegs *regs, int *nMatched);
  84.     // like Match2
  85.  
  86.     const char* GetPattern(); 
  87.     // return the pattern of this regular expression
  88.  
  89.     virtual const char *MatchWordPattern();
  90.     ostream& PrintOn(ostream&);
  91.     istream& ReadFrom(istream&);
  92.     void InspectorId(char *buf, int sz);
  93. };
  94.  
  95. //---- regular expression iterator --------------------------------------------
  96.  
  97. class RegularExpIter {
  98.     int pos;
  99.     char *str;
  100.     int len;
  101.     RegularExp *re;
  102.     int stop;
  103. public:
  104.     RegularExpIter (RegularExp *, char *string, int len = -1,int start = 0, 
  105.                               int stop = cMaxInt);
  106.     int operator()(int *len, RegExRegs *regs = 0);                    
  107.       // returns position of match (-1 = no match), and in len 
  108.       // the number of matched characters
  109.     void Reset (RegularExp *, char *string, int len = -1 , int start = 0, 
  110.                               int stop = cMaxInt);
  111. };
  112.  
  113. #endif RegExp_First
  114.  
  115.